package com.example.result;

import org.json.JSONException;
import org.json.JSONObject;
import com.example.result.entity.ChatResult;
import com.example.result.entity.InfoResult;
import com.example.result.entity.MusicResult;
import com.example.result.entity.PoetryResult;
import com.example.result.entity.SemanticResult;
import com.example.result.entity.SmartHomeResult;
import com.example.result.entity.SemanticResult.ServiceType;
import com.iflytek.aiuidemo.util.DevBoardControlUtil;
import android.text.TextUtils;

/**
 * 语义结果解析类，将json格式的语义结果解析为相应的实体类。
 * 
 * @author <a href="http://www.xfyun.cn">讯飞开放平台</a>
 * @date 2016年8月18日 上午10:48:32 
 *
 */
public class SemanticResultParser {
	private final static String KEY_SERVICE = "service";
	
	// 解析语义结果，无service字段或者service非演示的业务则返回null
	public static SemanticResult parse(JSONObject jsonObject) {
		SemanticResult semanticResult = null;
		
		try {
			// 增加判空操作，因为jsonObject有可能为null
			if (null == jsonObject ) {
				return null;
			}
			
			//拒识灯控制
			DevBoardControlUtil.rejectionLight(jsonObject);
			
			if (!jsonObject.has(KEY_SERVICE)) {
				return null;
			}
			
			String service = jsonObject.getString(KEY_SERVICE);
			
			if (!TextUtils.isEmpty(service)) {
				ServiceType serviceType = SemanticResult.getServiceType(service);
				
				switch (serviceType) {
					case WEATHER:
					case TRAIN:
					case FLIGHT:
					case NUMBER_MASTER:
						semanticResult = new InfoResult(service, jsonObject);
						break;
					case MUSICX:
						semanticResult = new MusicResult(service, jsonObject);
						break;
					case SMARTHOME:
						semanticResult = new SmartHomeResult(service, jsonObject);
						break;
					case CHAT:
						semanticResult = new ChatResult(service, jsonObject);
						break;
					case POETRY:
						semanticResult = new PoetryResult(service, jsonObject);
						break;
	
					default:
						break;
				}
			} 
		} catch (JSONException e) {
			e.printStackTrace();
		}
		
		return semanticResult;
	}
	
	public static SemanticResult parse(String json) {
		JSONObject jsonObject = null;
		try {
			jsonObject = new JSONObject(json);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		
		return parse(jsonObject);
	}
	
}
